package _20_十大排序算法;

import java.util.Arrays;

/**
 * 基于具体实现，可以是稳点排序，也可以是不稳定排序
 */
public class _02_选择排序 {

    public static void main(String[] args) {

        _02_选择排序 v = new _02_选择排序();

        int[] ins = new int[]{2, 3, 1, 5, 4, 2};

        v.selectSort(ins);

        System.out.println(Arrays.toString(ins));
    }

    /**
     * 选择排序，选择每一轮中最大元素，然后和末尾元素交换，
     * 选择排序实际和冒泡排序有点相同，都是每一轮选择最大的数值
     * @param nums
     */
    public void selectSort(int[] nums) {
        int len = nums.length - 1;
        // 剩下最后一个元素不用选择排序, 和第一个元素交换位置
        for (int i = 0; i < len; i++) {
            // 选择第一个为最大元素
            int max = i;
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] < nums[max]) max = j;
            }
            // 和第首位元素交换
            swap(nums, i, max);
        }
    }

    public void swap(int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }

}
